import java.util.Timer;
import java.util.TimerTask;

public class ThreadTimer {
    public static void main(String[] args) {
        System.out.println("程序启动");
        // 这个Timer 类就是标准库的定时器
        Timer timer = new Timer();
        timer.schedule(new TimerTask() { // TimerTask() 这个东西就是一个 Runnable 接口
            @Override
            public void run() {
                System.out.println("运行定时器任务1");
            }
        },3000); // schedule 这个方法的效果是 给定时器注册一个任务 , 任务不会立刻执行 ,而是在到一定的时间内在执行
        timer.schedule(new TimerTask() { // TimerTask() 这个东西就是一个 Runnable 接口
            @Override
            public void run() {
                System.out.println("运行定时器任务2");
            }
        },2000);
        timer.schedule(new TimerTask() { // TimerTask() 这个东西就是一个 Runnable 接口
            @Override
            public void run() {
                System.out.println("运行定时器任务3");
            }
        },1000);

        // 接下来呢自己动手写一个定时器
        // 1. 让被注册的任务能够在指定时间完成,被执行  (可以单独在定时器内部搞一个线程,让这个线程进行周期性的扫描,判断任务是否是到时间了)
        // 2. 一个定时器可以注册N个任务, 这N 个任务会按照最初约定的时间,按照循序执行
        // (而这 N个任务需要使用 数据结构 来保存的) (此处使用 优先级队列 是一个很好的选择)
        // (咱们这里的每一个任务 都是带个时间 多久之后执行 一定是时间越靠前 就先执行) (此时 扫描线程 只需要扫一下 队首元素即可.不必遍历整个队列)
        // 此处的优先级队列会在多线程环境下使用
        // PriorityBlockingQueue

    }
}
